﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sy5_8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Text = "二次函数"; // 设置窗体标题
            this.Size = new Size(400, 300); // 调整窗体大小以适配绘图
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            float x1, y1, x2, y;

            // 1. 获取窗体的画布
            Graphics g = this.CreateGraphics();
            // 抗锯齿，让图形更平滑
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

            // 2. 创建红色画笔（宽度0.5）
            Pen p = new Pen(Color.Red, 0.5f);
            // 图形中心点坐标（实验给定：x=20，y=窗体高度-20）
            float a = 20;
            float b = this.ClientSize.Height - 20;

            // 3. 平移坐标系到(a, b)（将原点移到画布左下方）
            g.TranslateTransform(a, b);
            // 绘制x轴（从(0,0)到窗体宽度-a）
            g.DrawLine(p, 0, 0, this.ClientSize.Width - a, 0);
            // 绘制y轴（从(0,0)到窗体高度-b的负方向，即向上）
            g.DrawLine(p, 0, 0, 0, -this.ClientSize.Height + b);

            // 4. 调整画笔宽度，准备绘制积分线
            p.Width = 1;
            p.EndCap = LineCap.Flat; // 线帽样式
            Random ran = new Random(); // 随机数（生成彩色线条）

            // 5. 定义字体（用于显示文字）
            int x = 30; // 函数定义域起始值
            Font f = new Font("宋体", 10, FontStyle.Bold);
            SolidBrush sb = new SolidBrush(Color.Black);
            // 绘制起始值文字
            g.DrawString(x.ToString(), f, sb, x - 10, 0);

            // 6. 循环绘制积分面积图（x从30到150）
            for (; x <= 150; x++)
            {
                // 计算y值：y = x² / 100（除以100是缩放系数，避免图形过大）
                y = x * x / 100.0f;

                // 生成随机颜色的画笔
                p.Color = Color.FromArgb(ran.Next(256), ran.Next(256), ran.Next(256));
                // 绘制直线：从(x, 0)到(x, -y)（y轴向下，所以用负号向上绘制）
                g.DrawLine(p, x, 0, x, -y);
            }

            // 7. 绘制定义域结束值文字
            g.DrawString(x.ToString(), f, sb, x - 10, 0);

            // 8. 释放资源
            p.Dispose();
            f.Dispose();
            sb.Dispose();
            g.Dispose();
        }
    }
}
